/**
 * 学生结构体
 * 使用示例: #include "../entity/Student.h"
 * 声明   : struct Student stu;
 */
#ifndef __STUDENT_DEFINED__
#define __STUDENT_DEFINED__
#include <stdio.h>

struct Student {
    char name[21];          //10个有效汉字 + 1位'\0'
    char sex;               // = '1' 不可以默认赋值...
    int age;
    int score[2];

    /**
     * 结构体内不可以写方法: void study() {}
     * 但可以写一个 函数指针/方法指针 指向这个方法(函数指针具体见: 36.pointer_function.c)
     */
    int (*pstudy)(int a);           //函数指针
};
//typedef struct Student student;   //还可以再定义一次类型



int study(int a) {
    printf("study: a = %d\n", a);
    return a;
}
//打印Student
void printStudentExtra(char *extra, struct Student stu) {
    if (extra != NULL) printf("%s\n", extra);
    printf("name = %s, sex = %c, age = %d, score = %d,%d\n", stu.name, stu.sex, stu.age, stu.score[0], stu.score[1]);
    int (*pFunction)(int) = stu.pstudy; //函数指针
    if (pFunction != NULL) {
        int v1 = pFunction(456);        //调用函数指针
    }
}
void printStudent(struct Student stu) {
    printStudentExtra(NULL, stu);
}

//还可以声明一些函数, 让 同名的.c 去实现!, 相当于Java的 Abstract 抽象方法.
void eatFood();

#endif
